#include<bits/stdc++.h>
using namespace std;
int t,n,m,l,v,p[100010],cnt=0,ans=0;
bool f;
struct node
{
    int d,u,a;
}car[100010];
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&t);
    for(int i=0;i<t;i++)
    {
        ans=0;
        f=1;
        scanf("%d%d%d%d",&n,&m,&l,&v);
        for(int j=0;j<n;j++)
        {
            scanf("%d%d%d",&car[j].d,&car[j].u,&car[j].a);
        }
        for(int j=0;j<m;j++)
        {
            scanf("%d",&p[j]);
        }
        for(int j=n-1;j>=0;j--)
        {
            if(car[j].u>v&&car[j].d<=p[m-1])
            {
                ans++;
                if(f)
                {
                    for(int x=m-1;x>=0;i++)
                    {
                        if(p[x]<car[j].d)cnt++;
                        else break;
                    }
                    f=0;
                }
            }
        }
        cout<<ans<<' '<<cnt;
    }
    return 0;
}
